package it.unibo.mycruise.chief.presentation.swing;

import java.awt.Color;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;

import it.unibo.mycruise.chief.FlagDisplay;

import javax.swing.JLabel;
import javax.swing.JPanel;

public class FlagDisplayView extends JPanel implements Observer {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private FlagDisplay flagDisplay = null;
	private List<JLabel> labels;

	public FlagDisplayView(FlagDisplay flagDisplay)
	{
		this.flagDisplay = flagDisplay;
		this.labels = new ArrayList<JLabel>();
		flagDisplay.addObserver(this);
		initGui();
	}

	protected void initGui()
	{
		int i = 0;
		for (Boolean flag : flagDisplay.getDisplayedFlags()) {
			JLabel label = new JLabel();
			label.setPreferredSize(new Dimension(100,20));
			label.setText(createInformationsString(i,flag));
			label.setForeground(Color.RED);
			labels.add(label);

			i++;

			//add to Panel
			add(label);
		}

		setVisible(true);
	}

	private String createInformationsString(int n, Boolean bool)
	{
		StringBuilder builder = new StringBuilder();
		builder.append("Boat");
		builder.append(n);
		builder.append(": \t");
		builder.append(bool);

		return builder.toString();
	}

	@Override
	public void update(Observable o, Object arg) 
	{
		int i = 0;
		for (JLabel label : labels) {
			label.setText(createInformationsString(i,flagDisplay.getDisplayedFlags().get(i)));
			if(!(flagDisplay.getDisplayedFlags().get(i)))
				label.setForeground(Color.RED);
			else
				label.setForeground(Color.GREEN);
			i++;
		}
	}
	
//	public static void main(String[] args) throws InterruptedException 
//	{
//		JFrame frame = new JFrame();
//		frame.setPreferredSize(new Dimension(120,180));
//		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//		FlagDisplay flagDisplay = new FlagDisplay(5);
//		frame.add(new FlagDisplayView(flagDisplay));
//		frame.pack();
//		frame.setVisible(true);
//
//		Thread.sleep(1000);
//
//		flagDisplay.setFlag(4);
//		
//		Thread.sleep(1000);
//		
//		flagDisplay.setFlag(0);
//		flagDisplay.setFlag(1);
//		flagDisplay.setFlag(2);
//		
//		Thread.sleep(1000);
//		
//		flagDisplay.clearFlag(1);
//		flagDisplay.clearFlag(2);
//	}

}
